package com.github.kezhenxu94.playground.java.interview.tencent;

import java.util.Arrays;

/**
 * 有趣的数字
 *
 * 小Q今天在上厕所时想到了这个问题：有n个数，两两组成二元组，差最小的有多少对呢？差最大呢？
 *
 *
 * 输入描述:
 *
 *  输入包含多组测试数据。
 *
 *  对于每组测试数据：
 *
 *  N - 本组测试数据有n个数
 *
 *  a1,a2...an - 需要计算的数据
 *
 *  保证:
 *
 *  1<=N<=100000,0<=ai<=INT_MAX.
 *
 *  输出描述:
 *
 *  对于每组数据，输出两个数，第一个数表示差最小的对数，第二个数表示差最大的对数。
 *
 *  输入例子:
 *  6
 *  45 12 45 32 5 6
 *
 *  输出例子:
 *  1 2
 *
 * TODO
 */
public class TencentNumPair {

	public static void main(String[] args) {
		TencentNumPair sol = new TencentNumPair();
		int[] nums = {45, 12, 45, 32, 5, 6};
		System.out.println(Arrays.toString(sol.pair(nums)));
	}

	public int[] pair(int[] nums) {
		Arrays.sort(nums);
		int max = 1, min = 1;
		if (nums[0] != nums[1])
			min = 1;
		else {
			for (int i = 1; nums[i] == nums[i - 1] && i < nums.length; i++)
				min++;
			min = min * (min - 1);
		}
		if (nums[nums.length - 1] != nums[nums.length -2])
			max = 1;
		else {
			for (int i = nums.length - 1; nums[i] == nums[i - 1] && i >= 0; i--)
				max++;
			max = max * (max - 1);
		}
		return new int[] {min, max};
	}
}
